#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;

const int N = (int)1e5 + 100;
double vw[N], pf[N], vf[N], th[N];
double wPoint[N];
double kValue[N];
int perm[N];

bool cmp(int a, int b)
{
	return wPoint[a] < wPoint[b];
}


int main()
{
	freopen ("input.txt", "r", stdin);
	freopen ("output.txt", "w", stdout);
	while (1)
	{
		int n;
		scanf("%d", &n);
		if (n == 0)
			break;
		double pw;
		scanf("%lf", &pw);
		for (int i = 0; i < n; i++)
		{
			scanf("%lf%lf%lf%lf", &vw[i], &pf[i], &vf[i], &th[i]);
			wPoint[i] = 0;
			if (vw[i] != 0)
				wPoint[i] = max(0., th[i] / vw[i]);
			perm[i] = i;
			kValue[i] = -vw[i] * pf[i] / vf[i];
		}
		sort(perm, perm + n, cmp);
		double k = pw;
		double value = 0;
		for (int i = 0; i < n; i++)
		{
			if (th[i] > 0)
			{
				value += th[i] / vf[i] * pf[i];
			}
			if (vw[i] > 0)
			{
				k += kValue[i];
			}
		}
		double ans = value;
		double oldWater = 0;
		for (int i = 0; i < n; i++)
		{
			int index = perm[i];
			double curWater = wPoint[index];
			double dWater = curWater - oldWater;
			oldWater = curWater;
			value += k * dWater;
			ans = min(ans, value);
			if (vw[index] < 0)
				k += kValue[index];
			else
				k -= kValue[index];
		}
		printf("%.10lf\n", ans);
	}
	return 0;
}